module.exports = function (edge, dllPath) {
  var DLL = dllPath + 'SNCS.Interop.Edge.dll',
      _references = ['SNCS.Auxiliary.dll'];

  return {
    connect: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'Connect'
      // Parameter Object
      // user: string; default: "user"
      // pass: string; default: "pass"
      // server: string; default: "localhost"
      // port: integer; default: 12345
      // auth: boolean; default: true
      //
      // returns string (id)
    }),
    setValue: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'SetValue'
      // Parameter Object
      // id: string
      // name: string
      // value: string
      //
      // returns boolean (success)
    }),
    getValue: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'GetValue'
      // Parameter Object
      // id: string
      // name: string
      //
      // returns string (value)
    }),
    delValue: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'DelValue'
      // Parameter Object
      // id: string
      // name: string
      //
      // returns boolean (success)
    }),
    getDB: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'GetDB'
      // Parameter Object
      // id: string
      // name: string
      // create: boolean
      //
      // returns string (db)
    }),
    deleteDB: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'DeleteDB'
      // Parameter Object
      // id: string
      // name: string
      //
      // returns boolean (success)
    }),
    listDBs: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'ListDBs'
      // Parameter Object
      // id: string
      // db: string; default: ""
      //
      // returns List<string> (databases)
    }),
    listValues: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'ListValues'
      // Parameter Object
      // id: string
      // name: string; default: ""
      //
      // returns Dictionary<string, string> (Keys & Values)
    }),
    listPrivateValues: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'ListPrivateValues'
      // Parameter Object
      // id: string
      // db: string
      // name: string; default: ""
      //
      // returns Dictionary<string, string> (Keys & Values)
    }),
    setPrivateValue: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'SetPrivateValue'
      // Parameter Object
      // id: string
      // db: string
      // name: string
      // value: string
      //
      // returns boolean (success)
    }),
    getPrivateValue: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'GetPrivateValue'
      // Parameter Object
      // id: string
      // db: string
      // name: string
      //
      // returns string (value)
    }),
    delPrivateValue: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'DelPrivateValue'
      // Parameter Object
      // id: string
      // db: string
      // name: string
      //
      // returns boolean (success)
    }),
    getConnected: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'GetConnected'
      // Parameter Object
      // id: string
      //
      // returns boolean (connected)
    }),
    getConnectedServer: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'GetConnectedServer'
      // Parameter Object
      // id: string
      //
      // returns string (server)
    }),
    getConnectedServerPort: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'GetConnectedServerPort'
      // Parameter Object
      // id: string
      //
      // returns integer (port)
    }),
    close: edge.func({
      assemblyFile: DLL,
      references: _references,
      methodName: 'Close'
      // Parameter Object
      // id: string
      //
      // returns boolean (success)
    })
  }
}